package com.xiao.common.exception;


import com.xiao.common.common.BaseResponse;
import com.xiao.common.common.ErrorCode;
import com.xiao.common.common.ResultUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * 全局异常处理器
 *
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    @ExceptionHandler(BusinessException.class)
    public BaseResponse<?> businessExceptionHandler(BusinessException e) {
        log.error("BusinessException", e);
        return ResultUtils.error(e.getCode(), e.getMessage());
    }

    @ExceptionHandler(RuntimeException.class)
    public BaseResponse<?> runtimeExceptionHandler(RuntimeException e) {
        log.error("RuntimeException", e);
        return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");
    }

    /**
     * 处理JSON解析异常
     * 如下列请求：
     * {
     *   "userAccount": Cuser,      这里缺少引号，应该是字符串
     *   "userPassword": “12345678”
     * }
     * @param e
     * @return
     */
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public BaseResponse<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e) {
        // 记录异常日志（便于排查问题）
        log.error("JSON解析错误：", e);
        // 返回标准化错误响应，使用"请求参数错误"的错误码，并补充具体信息
        String errorMsg = "JSON解析失败：请求参数格式不正确（例如字符串需加引号）";
        return ResultUtils.error(ErrorCode.PARAMS_ERROR.getCode(), errorMsg);
    }
}
